<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
  <meta name="generator" content=
  "HTML Tidy for Linux/x86 (vers 1 September 2005), see www.w3.org">

  <title>C++ Iterators</title>
  <link href="cppreference.css" rel="stylesheet" type="text/css">
</head>

<body>
<table>
  <tr>
  <td>
  <div class="body-content">

  <div class="header-box">
    <a href="index.html">cppreference.com</a> &gt; C++ Iterators
  </div>

  <h3>C++ Iterators</h3>

  <p>Iterators are used to access members of the container classes, and
  can be used in a similar manner to pointers. For example, one might
  use an iterator to step through the elements of a <a href=
  "cppvector/index.html">vector</a>. There are several different types
  of iterators:</p>

  <table class="misc-table">
    <tr class="misc-table-tr-1">
      <th>Iterator</th>

      <th>Description</th>
    </tr>

    <tr class="misc-table-tr-2">
      <td>input_iterator</td>

      <td>Read values with forward movement. These can be incremented,
      compared, and dereferenced.</td>
    </tr>

    <tr class="misc-table-tr-1">
      <td>output_iterator</td>

      <td>Write values with forward movement. These can be incremented
      and dereferenced.</td>
    </tr>

    <tr class="misc-table-tr-2">
      <td>forward_iterator</td>

      <td>Read or write values with forward movement. These combine the
      functionality of input and output iterators with the ability to
      store the iterators value.</td>
    </tr>

    <tr class="misc-table-tr-1">
      <td>bidirectional_iterator</td>

      <td>Read and write values with forward and backward movement.
      These are like the forward iterators, but you can increment and
      decrement them.</td>
    </tr>

    <tr class="misc-table-tr-2">
      <td>random_iterator</td>

      <td>Read and write values with random access. These are the most
      powerful iterators, combining the functionality of bidirectional
      iterators with the ability to do pointer arithmetic and pointer
      comparisons.</td>
    </tr>

    <tr class="misc-table-tr-1">
      <td>reverse_iterator</td>

      <td>Either a random iterator or a bidirectional iterator that
      moves in reverse direction.</td>
    </tr>
  </table>

  <p>Each of the container classes is associated with a type of
  iterator, and each of the STL algorithms uses a certain type of
  iterator. For example, vectors are associated with
  <strong>random-access iterators</strong>, which means that they can
  use algorithms that require random access. Since random-access
  iterators encompass all of the characteristics of the other
  iterators, vectors can use algorithms designed for other iterators as
  well.</p>

  <p>The following code creates and uses an iterator with a vector:</p>
  <pre>
  vector&lt;int&gt; the_vector;
  vector&lt;int&gt;::iterator the_iterator;
  for( int i=0; i &lt; 10; i++ )
    the_vector.push_back(i);
  int total = 0;
  the_iterator = the_vector.begin();
  while( the_iterator != the_vector.end() ) {
    total += *the_iterator;
    the_iterator++;
  }
  cout &lt;&lt; &quot;Total=&quot; &lt;&lt; total &lt;&lt; endl;
</pre>Notice that you can access the elements of the container by
dereferencing the iterator.
  </div>
  </td>
  


  </tr>
  </table>
</body></html>
